package leetcode.code0166;

import java.util.HashMap;
import java.util.Map;

public class Solution extends Solution166 {

	@Override
	public String fractionToDecimal(int numerator, int denominator) {
		// 类似算数相关的Integer.MIN_VALUE简直恶趣味, int 升级到 long
		long ln = numerator;// ~
		long ld = denominator;// ~
		// 如果本身能够整除，直接返回计算结果
		if (ln % ld == 0)// ~
			return String.valueOf(ln / ld);
		// 转成正数算除法
		ln = ln > 0 ? ln : -ln;
		ld = ld > 0 ? ld : -ld;
		// 结果字符串
		StringBuffer ans = new StringBuffer();
		// 添加符号
		if ((numerator ^ denominator) < 0) {
			ans.append("-");
		}
		ans.append(ln / ld).append(".");// 添加整数部分 ~// 添加小数点
		long m = ln % ld;// 检查余数
		Map<Long, Integer> map = new HashMap<>();
		while (m != 0) {// ~
			map.put(m, ans.length());//~ 余数第一次出现时,字符串已经有多长
			m *= 10;// 补0
			ans.append(m / ld);// 不够除自然d=0,添加一个0
			m %= ld;// ~
			if (map.containsKey(m)) {// 余数再次出现,预示着即将开始循环
				ans.insert(map.get(m), "(").append(")");// 在第一次出现的位置插入左括号,追加右括号,跳出循环
				break;
			}
		}
		return ans.toString();
	}

	public static void main(String[] args) {
		Solution so = new Solution();
		so.debug1();
		so.debug2();
		so.debug3();
		so.debug4();
		so.debug5();
		so.debug6();
//		so.debug(1, 90);
//		so.debug(-1, Integer.MIN_VALUE);
//		so.debug(-50,8);
//		so.debug(7, -12);
		StringBuffer sb = new StringBuffer();
		sb.append("123456");
		sb.insert(3, 9);
		System.out.println(sb.toString());
		System.out.println(sb.substring(1, 2));

	}

}
